﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Business.Entities;
using Business.Logic;

namespace UI.Consola
{
    public class Usuarios
    {
        private UsuarioLogic UsuarioNegocio;

        public Usuarios()
        {
            UsuarioNegocio = new UsuarioLogic();
        }

        public void Menu()
        {
            bool continuar = true;
            while (continuar == true)
            {
                try
                {
                    Console.Clear();
                    Console.WriteLine("Menu:\n");
                    Console.WriteLine("1- Listado General\n2- Consultar\n3- Agregar\n4- Modificar\n" +
                                      "5- Eliminar\n6- Salir\n");
                    Console.Write("Elija una opcion: ");
                    int numIng = int.Parse(Console.ReadLine());
                    int op = this.Control(numIng);
                    switch (op)
                    {
                        case 1: this.ListadoGeneral();
                            break;
                        case 2: this.Consultar();
                            break;
                        case 3: this.Agregar();
                            break;
                        case 4: this.Modificar();
                            break;
                        case 5: this.Eliminar();
                            break;
                        case 6: continuar = false;
                            break;
                    }
                }
                catch (Exception e)
                {
                    //Console.WriteLine(e.Message);
                }
                finally
                {
                    Console.WriteLine("\nPresiones una tecla para continuar\n");
                    Console.ReadKey();
                }
            }
        }

        private void ListadoGeneral()
        {
            Console.Clear();
            Console.WriteLine("Listado general\n");
            /*foreach(Usuario usr in UsuarioNegocio.GetAll()) //devuelve lista
            {
                MostratDatos(usr);
            }*/
        }
        private void Consultar()
        {
            try
            {
                Console.Clear();
                Console.WriteLine("Consultar un Usuario\n");
                Console.Write("Ingrese el ID del usuario a consultar: ");
                int ID = int.Parse(Console.ReadLine());
                this.MostratDatos(UsuarioNegocio.GetOne(ID));
            }
            catch (FormatException)
            {
                Console.WriteLine("\nLa ID debe ser un numero entero");
            }
            catch (Exception e)
            {
                Console.WriteLine("\n" + e.Message);
            }
        }
        private void Agregar()
        {
            Console.Clear();
            Console.WriteLine("Agregar nuevo usuario\n");
            Usuario usr = new Usuario();
            Console.Write("Ingrese Apellido: ");
            usr.Apellido = Console.ReadLine();
            Console.Write("\nIngrese Nombre: ");
            usr.Nombre = Console.ReadLine();
            Console.Write("\nIngrese Email: ");
            usr.EMail = Console.ReadLine();
            Console.Write("\nIngrese Nombre de Usuario: ");
            usr.NombreUsuario = Console.ReadLine();
            Console.Write("\nIngrese clave: ");
            usr.Clave = Console.ReadLine();
            Console.Write("\nIngrese habilitacion de usuario (1-Si/Otro-No): ");
            usr.Habilitado = (Console.ReadLine() == "1"); //asigna boolean
            usr.State = BusinessEntity.States.New;
            //UsuarioNegocio.Save(usr);
            Console.WriteLine("\nID del usuario: {0}",usr.ID);
        }
        private void Modificar()
        {
            try
            {
                Console.Clear();
                Console.WriteLine("Modificar un usuario\n");
                Console.Write("Ingrese ID de usuario: ");
                int ID = int.Parse(Console.ReadLine());
                this.MostratDatos((UsuarioNegocio.GetOne(ID)));
                Usuario usr = UsuarioNegocio.GetOne(ID);
                Console.Write("\nIngrese Apellido: ");
                usr.Apellido=Console.ReadLine();
                Console.Write("\nIngrese Nombre: ");
                usr.Nombre=Console.ReadLine();
                Console.Write("\nIngrese Email: ");
                usr.EMail=Console.ReadLine();
                Console.Write("\nIngrese Nombre de Usuario: ");
                usr.NombreUsuario=Console.ReadLine();
                Console.Write("\nIngrese clave: ");
                usr.Clave=Console.ReadLine();
                Console.Write("\nIngrese habilitacion de usuario (1-Si/Otro-No): ");
                usr.Habilitado=(Console.ReadLine()=="1"); //asigna boolean
                usr.State=BusinessEntity.States.Modified;
                //UsuarioNegocio.Save(usr);
            }
            catch (FormatException)
            {
                Console.WriteLine("\nLa ID debe ser un numero entero");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        private void Eliminar()
        {
            try
            {
                Console.Clear();
                Console.WriteLine("Eliminar un usuario\n");
                Console.Write("Ingrese la ID del usuario que desea eliminar: ");
                int IDAux = int.Parse(Console.ReadLine());
                //UsuarioNegocio.Delete(IDAux);
            }
            catch (FormatException)
            {
                Console.WriteLine("\nLa ID debe ser un numero entero");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        private void MostratDatos(Usuario usr)
        {
            Console.WriteLine("Usuario {0}", usr.ID);
            Console.WriteLine("\t\tNombre {0}", usr.Nombre);
            Console.WriteLine("\t\tApellido {0}", usr.Apellido);
            Console.WriteLine("\t\tNombre Usuario {0}", usr.NombreUsuario);
            Console.WriteLine("\t\tClave {0}", usr.Clave);
            Console.WriteLine("\t\tEmail {0}", usr.EMail);
            if (usr.Habilitado)
            {
                Console.WriteLine("\t\tHabilitado");
            }
            else
            {
                Console.WriteLine("\t\tDeshabilitado");
            }
            Console.WriteLine();
        }
        private int Control(int op)
        {
            while ((op < 1) || (op > 6))
            {
                Console.Write("\nNo es una opcion accesible al menu\n\nintentelo nuevamente: ");
                op = int.Parse(Console.ReadLine());
            }
            return op;
        }
    }
}
